#ifndef SQLCaseExpr_HEADER_H
#define SQLCaseExpr_HEADER_H


#include <list>
#include "../SQLExpr.h"
#include "../SQLExprImpl.h"
#include "../SQLObjectImpl.h"

#include "SQLCaseExpr_Item.h"
class SQLASTVisitor;

class SQLCaseExpr : virtual public SQLExprImpl
{

private:
  // static long serialVersionUID = 1L;
  SQLCaseExpr_Item_list_ptr items;
  SQLExpr_ptr valueExpr;
  SQLExpr_ptr elseExpr;

public:
  static string_ptr class_;
  SQLCaseExpr();
  virtual ~SQLCaseExpr();
  SHAREDOBJECT(SQLCaseExpr);

  SQLExpr_ptr getValueExpr();

  void setValueExpr(SQLExpr_ptr valueExpr);

  SQLExpr_ptr getElseExpr();

  void setElseExpr(SQLExpr_ptr elseExpr);

  SQLCaseExpr_Item_list_ptr getItems();

  void addItem(SQLCaseExpr_Item_ptr item);

protected:
  void accept0(SQLASTVisitor_ptr visitor);
  void acceptChild(SQLASTVisitor_ptr visitor, SQLCaseExpr_Item_list_ptr children);
  void acceptChild(SQLASTVisitor_ptr visitor, SQLExpr_ptr children);

public:
  // int hashCode();
  // BOOL_ptr equals(Object obj);
};
// typedef boost::shared_ptr<SQLCaseExpr> SQLCaseExpr_ptr;
// typedef boost::shared_ptr<SQLCaseExpr_Item> SQLCaseExpr_Item_ptr;
#endif
